function foo<T, R>(a: T, b: R): { a: T, b: R } {
    return {
        a, b
    }
}

foo(1, 2)

foo('1', '2')

foo([], {})